package com.example.demo.controller;

import com.common.model.ViewVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ClientController {


    // SpringCloud提供的负载均衡的对象。
    // ribbon的负载均衡器。通过该对象可以获取调用服务的ip地址、端口号等等信息。
    // 通过服务的名称获取到调用服务的ip地址、端口号等等信息。
    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @GetMapping("/queryService")
    public ViewVo query() {

        // 1、选择调用的服务的名称
        // 注意,ServiceInstance封装了服务的基本信息,包含ip地址、端口号
        ServiceInstance serviceInstance = this.loadBalancerClient.choose("service-prodvider1");
        // 2、拼接访问服务的URL。StringBuffer线程安全的,StringBuilder线程不安全,效率高
        StringBuilder sb = new StringBuilder();
        // 访问地址,http://127.0.0.1:8080/showUser
        sb.append("http://").append(serviceInstance.getHost()).append(":").append(serviceInstance.getPort())
                         .append("showUser");

        ViewVo vo = new ViewVo();
        vo.setName("service-prodvider1");
        vo.setDecription(sb.toString());
        return vo;
    }
}
